package gui;

/*
 * Esse arquivo é parte do Software new Recicle
 * 
 * Copyright (C) 2011-$AnoCorrente$ Eduardo Moreira Barbosa
 * Copyright (C) 2011-$AnoCorrente$ João dos Santos Gonçalves
 * Copyright (C) 2011-$AnoCorrente$ Lucas Ximenes da Fonseca
 * 
 * new Recicle é um Software Livre: Você pode redistribuí-lo e/ou modificá-lo
 * de acordo com os termos da Licença Pública Geral GNU (GNU General Public License)
 * conforme publicada pela Free Software Foundation (FSF). Essa permissão é atribuída
 * na versão 3 da Licença, ou (na sua opinião) qualquer versão.
 * 
 * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este programa,
 * se não, escreva para a Fundação do Software Livre(FSF) Inc., 51 Franklin St, Fifth Floor,
 * Boston, MA  02110-1301  USA
 * 
 * Se você tiver alguma dúvida e/ou quiser dar suporte ao desenvolvimento, favor entrar em
 * contato nos e-mails <barbosa.edrd@gmail.com>, <john.jsg@hotmail.com>, <lxf.lucas@gmail.com>.
 */

import bd.BancoAssociado;
import bd.BancoDeDados;
import bd.BancoVoluntario;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.Timer;

public class NewRecicle extends javax.swing.JFrame {
    // Janelas
    protected static NewRecicle janela;
    private static PreNewRecicle preNewRecicle;
    private static BancoDeDados bancoDeDados;
    private static BancoAssociado bancoAssociado;
    private static BancoVoluntario bancoVoluntario;
    // Paneis
    private JPanel jp1 = new Panel_Associados();
    private JPanel jp2 = new Panel_Voluntarios();
    
    // Outras
    private static String nomeUsuarioAutenticado;
    private static String tipoJanela;
    protected static Icon iconUser;
    protected static boolean botaoAtivo;
    private static String enderecoPath;
    
    // Botoes para uso local
    private JButton botaoA1 = Panel_Associados.botao1;
    private JButton botaoA2 = Panel_Associados.botao2;
    private JButton botaoA3 = Panel_Associados.botao3;
    private JButton botaoA4 = Panel_Associados.botao4;
    private JButton botaoA5 = Panel_Associados.botao5;
    private JButton botaoA6 = Panel_Associados.botao6;
    private JButton botaoV1 = Panel_Voluntarios.botao1;
    private JButton botaoV2 = Panel_Voluntarios.botao2;
    private JButton botaoV3 = Panel_Voluntarios.botao3;
    private JButton botaoV4 = Panel_Voluntarios.botao4;
    private JButton botaoV5 = Panel_Voluntarios.botao5;
    private JButton botaoV6 = Panel_Voluntarios.botao6;

    private static JButton[] botoesVE;
    private JButton[] botoesVol =  { botaoV1, botaoV2, botaoV3, botaoV4, botaoV5, botaoV6 };

    private static JButton[] botoesAE;
    private JButton[] botoesAssoc = { botaoA1, botaoA2, botaoA3, botaoA4, botaoA5, botaoA6};

    public NewRecicle() {
        initComponents();

        preNewRecicle = new PreNewRecicle();
        preNewRecicle.setLocationRelativeTo(janela);
        preNewRecicle.setVisible(true);

        paneisTab.addTab("Associados", jp1);
        paneisTab.addTab("Voluntários", jp2);

        /**
         * Cria botões estáticos para se pode troca as imagens
         * sem a necessidade de criar um novo objeto.
         */
        botoesVE =  botoesVol;
        botoesAE =  botoesAssoc;

        /**
         * Cria os botões dos associados e voluntários automaticamente.
         */
        criaBotoesAutomaticamente();
       
        // Eventos para os botões do Panel_Associados 
        funcoesBotoes();

        /**
         * Modificação do icone e centralização da janela
         */
        centralizacaoEIcone();
        /**
         * Troca Preloader por janela do Ervilha
         */
        trocaJanela();

    }
    
    /**
     * @return o tipo de janela String
     */
    public static String tipoDeJanela() {
        return tipoJanela;
    }
    
    public static String nomeUsuario() {
        return nomeUsuarioAutenticado;
    }
    

    /** 
     * Localicação no centro da tela e icone da janela
     */
    private void centralizacaoEIcone() {

        this.setLocation(((Toolkit.getDefaultToolkit().getScreenSize().width / 2) - (this.getWidth() / 2)),
                ((Toolkit.getDefaultToolkit().getScreenSize().height / 2) - (this.getHeight() / 2)));

        try {
            //Setando o Icone do Frame Principal
            this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/imagens/ervilha/Logo.png")));
        } catch (Exception e) {
        }
    }

    private void MouseClicked(java.awt.event.MouseEvent evt, String tipo, Icon icon) {
        tipoJanela = tipo;
        iconUser = icon;

        Login login = new Login(new javax.swing.JFrame(), true);
        login.setLocationRelativeTo(jp1);
        login.setVisible(true);
    }
    
    /**
     * Realiza a troca da PreLoader para a janela principamel após
     * cerca de 16 segundos.
     */
    public static void trocaJanela() {
        int delay = 16650; //milliseconds
        ActionListener taskPerformer = new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent evt) {
                janela.setVisible(true);
                preNewRecicle.dispose();
            }
        };

        Timer timeJanela = new Timer(delay, taskPerformer);
        timeJanela.start();
        timeJanela.setRepeats(false);
    }

    private static void criaBotoesAutomaticamente() {

        bancoDeDados = new BancoDeDados();
        bancoDeDados.conectarBanco();

        /*
         * Voluntários
         */
        bancoVoluntario = new BancoVoluntario();
        bancoVoluntario.pesquisarId();
        String[] quantVol = bancoVoluntario.retornarId();
        String[] volBanco;

        /*
         * Para garantir que não seja maior do que o número de botões.
         */
        int ind;
        if ( quantVol.length <= 6 ) {
           ind = quantVol.length;
        } else {
            ind = 6;
        }

        for (int i = 0; (i < ind) ; i++) {
            try {
                bancoVoluntario.pesquisarBanco(quantVol[ i]);
                volBanco = bancoVoluntario.retornarBanco().split("#");

                botoesVE[ i ].setName( volBanco[0] );
                enderecoPath = volBanco[ 7 ];
                new EscolherImagemBotao().resolveImagemBotao( botoesVE[ i ], enderecoPath);
                botoesVE[ i ].setEnabled(true);
            } catch (Exception e) {
            }
        }

        /*
         * Associados
         */

        bancoAssociado = new BancoAssociado();
        bancoAssociado.pesquisarId();
        String[] quantAssoc = bancoAssociado.retornarId();
        String[] assocBanco;

        /*
         * Para garantir que não seja maior do que o número de botões.
         */
        if ( quantVol.length <= 6 ) {
           ind = quantVol.length;
        } else {
            ind = 6;
        }

        for (int i = 0; i < quantAssoc.length; i++) {
            try {
                bancoAssociado.pesquisarBanco(quantAssoc[ i]);
                assocBanco = bancoAssociado.retornarBanco().split("#");

                botoesAE[ i].setName( assocBanco[0] );
                enderecoPath = assocBanco[4];
                new EscolherImagemBotao().resolveImagemBotao(botoesAE[ i ], enderecoPath);
                botoesAE[ i].setEnabled(true);
            } catch (Exception e) {
            }
        }
    }

    public static void atualizaBotoes() {
        NewRecicle.criaBotoesAutomaticamente();
    }

    private static void desativaBotoesAutomaticamente() {

        /*
         * Voluntários
         */
        bancoVoluntario = new BancoVoluntario();
        bancoVoluntario.pesquisarId();

        for (int i = 0; (i < 6) ; i++) {
            try {
                botoesVE[ i ].setName(null);
                botoesVE[ i ].setIcon(null);
                botoesVE[ i ].setEnabled(false);
            } catch (Exception e) {
                System.out.println("Erro ao eliminar botão!\n" + e);
            }
        }

        /*
         * Associados
         */
        bancoAssociado = new BancoAssociado();
        bancoAssociado.pesquisarId();

       for (int i = 0; i < 6; i++) {
            try {
                botoesAE[i].setName(null);
                botoesAE[i].setIcon(null);
                botoesAE[i].setEnabled( false );
            } catch (Exception e) {
                System.out.println("Erro ao eliminar botão\n!" + e);
            }
        }
    }

    public static void desativaBotoes() {
        bancoVoluntario = new BancoVoluntario();
        bancoVoluntario.pesquisarId();
        bancoAssociado = new BancoAssociado();
        bancoAssociado.pesquisarId();

        NewRecicle.desativaBotoesAutomaticamente();

        NewRecicle.criaBotoesAutomaticamente();
        
    }

    private void funcoesBotoes() {
        botaoA1.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if ( botaoA1.isEnabled() ) {
                    nomeUsuarioAutenticado = botaoA1.getName();
                    MouseClicked(evt, "Associado", botaoA1.getIcon());
                }
            }
        }); // Fim

        botaoA2.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if ( botaoA2.isEnabled() ) {
                    nomeUsuarioAutenticado = botaoA2.getName();
                    MouseClicked(evt, "Associado", botaoA2.getIcon());
                }
            }
        }); // Fim

        botaoA3.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if ( botaoA3.isEnabled() ) {
                    nomeUsuarioAutenticado = botaoA3.getName();
                    MouseClicked(evt, "Associado", botaoA3.getIcon());
                }
            }
        }); // Fim

        botaoA4.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if ( botaoA4.isEnabled() ) {
                    nomeUsuarioAutenticado = botaoA4.getName();
                    MouseClicked(evt, "Associado", botaoA4.getIcon());
                }
            }
        }); // Fim

        botaoA5.addMouseListener(new java.awt.event.MouseAdapter() {

            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if ( botaoA5.isEnabled() ) {
                    nomeUsuarioAutenticado = botaoA5.getName();
                    MouseClicked(evt, "Associado", botaoA5.getIcon());
                }
            }
        }); // Fim

        botaoA6.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if ( botaoA6.isEnabled() ) {
                    nomeUsuarioAutenticado = botaoA6.getName();
                    MouseClicked(evt, "Associado", botaoA6.getIcon());
                }
            }
        }); // Fim

        /**
         * Eventos para Panel_Voluntarios
         */ 
        botaoV1.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if ( botaoV1.isEnabled() ) {
                    nomeUsuarioAutenticado = botaoV1.getName();
                    MouseClicked(evt, "Voluntario", botaoV1.getIcon());
                }
            }
        }); // Fim

        botaoV2.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if ( botaoV2.isEnabled() ) {
                    nomeUsuarioAutenticado = botaoV2.getName();
                    MouseClicked(evt, "Voluntario", botaoV2.getIcon());
                }
            }
        }); // Fim

        botaoV3.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if ( botaoV3.isEnabled() ) {
                    nomeUsuarioAutenticado = botaoV3.getName();
                    MouseClicked(evt, "Voluntario", botaoV3.getIcon());
                }
            }
        }); // Fim

        botaoV4.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if ( botaoV4.isEnabled() ) {
                    nomeUsuarioAutenticado = botaoV4.getName();
                    MouseClicked(evt, "Voluntario", botaoV4.getIcon());
                }
            }
        }); // Fim

        botaoV5.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if ( botaoV5.isEnabled() ) {
                    nomeUsuarioAutenticado = botaoV5.getName();
                    MouseClicked(evt, "Voluntario", botaoV5.getIcon());
                }
            }
        }); // Fim
        
        botaoV6.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if ( botaoV6.isEnabled() ) {
                    nomeUsuarioAutenticado = botaoV6.getName();
                    MouseClicked(evt, "Voluntario", botaoV6.getIcon());
                }
            }
        }); // Fim

    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        paneisTab = new javax.swing.JTabbedPane();
        menuBarra = new javax.swing.JMenuBar();
        menuArquivo = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        menuSobre = new javax.swing.JMenu();
        jMenuItem2 = new javax.swing.JMenuItem();
        jMenuItem3 = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("new Recicle");
        setMinimumSize(new java.awt.Dimension(815, 700));
        setResizable(false);

        paneisTab.setTabPlacement(javax.swing.JTabbedPane.BOTTOM);
        paneisTab.setFont(new java.awt.Font("Arial Unicode MS", 0, 18));

        menuArquivo.setMnemonic('A');
        menuArquivo.setText("Arquivo");

        jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_Q, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItem1.setMnemonic('s');
        jMenuItem1.setText("Sair");
        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem1ActionPerformed(evt);
            }
        });
        menuArquivo.add(jMenuItem1);

        menuBarra.add(menuArquivo);

        menuSobre.setMnemonic('s');
        menuSobre.setText("Sobre");
        menuSobre.setToolTipText("");
        menuSobre.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                menuSobreMouseClicked(evt);
            }
        });

        jMenuItem2.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItem2.setMnemonic('n');
        jMenuItem2.setText("Sobre new Recicle");
        jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem2ActionPerformed(evt);
            }
        });
        menuSobre.add(jMenuItem2);

        jMenuItem3.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_L, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItem3.setMnemonic('l');
        jMenuItem3.setText("Sobre licença");
        jMenuItem3.setToolTipText("");
        jMenuItem3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem3ActionPerformed(evt);
            }
        });
        menuSobre.add(jMenuItem3);

        menuBarra.add(menuSobre);

        setJMenuBar(menuBarra);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(paneisTab, javax.swing.GroupLayout.DEFAULT_SIZE, 810, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(paneisTab, javax.swing.GroupLayout.DEFAULT_SIZE, 579, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed

        System.exit(0);     }//GEN-LAST:event_jMenuItem1ActionPerformed

    private void menuSobreMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuSobreMouseClicked
    }//GEN-LAST:event_menuSobreMouseClicked

    private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed
        SobreNewRecicle sobreNewRecicle = new SobreNewRecicle(new javax.swing.JFrame(), true);
        sobreNewRecicle.setLocationRelativeTo(this);
        sobreNewRecicle.setVisible(true);
    }//GEN-LAST:event_jMenuItem2ActionPerformed

    private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem3ActionPerformed
        SobreLicenca sobreLicenca = new SobreLicenca(new javax.swing.JFrame(), true);
        sobreLicenca.setLocationRelativeTo(this);
        sobreLicenca.setVisible(true);
    }//GEN-LAST:event_jMenuItem3ActionPerformed

    public static void main(String args[]) {

        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(NewRecicle.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(NewRecicle.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(NewRecicle.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(NewRecicle.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                janela = new NewRecicle();
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JMenuItem jMenuItem3;
    private javax.swing.JMenu menuArquivo;
    private javax.swing.JMenuBar menuBarra;
    private javax.swing.JMenu menuSobre;
    protected static javax.swing.JTabbedPane paneisTab;
    // End of variables declaration//GEN-END:variables
}
